package com.btm.dorisinfo.model;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.List;

/**
 * 数据库表结构信息模型
 * 用于存储数据库表的完整结构信息，包括表的基本信息和列信息
 * 该模型同时用于数据库表结构和Meilisearch索引结构的映射
 *
 * @author btm
 * @since 2024-03-21
 */
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class TableInfo {
    /**
     * 唯一标识符
     * 用于在Meilisearch中标识不同的表结构
     */
    private long id;

    /**
     * 数据库名称
     * 表所属的数据库schema名称
     */
    private String tableSchema;

    /**
     * 表名
     * 数据库中的表名
     */
    private String tableName;

    /**
     * 表注释
     * 表的中文说明或业务含义
     */
    private String tableComment;

    /**
     * 列信息列表
     * 包含表中所有列的详细信息
     */
    private List<ColumnInfo> columns;

    /**
     * 列信息内部类
     * 用于描述表中每一列的详细属性
     */
    @Data
    @Builder
    @NoArgsConstructor
    @AllArgsConstructor
    public static class ColumnInfo {
        /**
         * 列名
         * 数据库中的字段名
         */
        private String columnName;

        /**
         * 数据类型
         * 字段的完整数据类型定义，包括长度和其他属性
         * 例如：varchar(255), int(11), decimal(10,2)等
         */
        private String dataType;

        /**
         * 列注释
         * 字段的中文说明或业务含义
         */
        private String columnComment;

        /**
         * 主键标识
         * 值为"PRI"表示该字段为主键
         */
        private String columnKey;

        /**
         * 是否可为空
         * "YES"表示可为空，"NO"表示不可为空
         */
        private String isNullable;

        /**
         * 默认值
         * 字段的默认值，如果没有设置则为null
         */
        private String columnDefault;
    }
}